package br.com.dallasmotopecas.comum.fabricante.controller;

import java.sql.Connection;
import java.util.ArrayList;
import java.util.List;

import javax.faces.context.ExternalContext;

import br.com.dallasmotopecas.comum.fabricante.model.FabricanteModel;
import br.com.dallasmotopecas.comum.fabricante.vo.FabricanteVo;
import br.com.dallasmotopecas.eptus.fabricante.controller.FabricanteEptusController;
import br.com.dallasmotopecas.util.controller.AbstractController;
import br.com.dallasmotopecas.util.exception.ClasseNaoEncontradaException;
import br.com.dallasmotopecas.util.exception.ConexaoException;
import br.com.dallasmotopecas.util.exception.InserirObjetoException;
import br.com.dallasmotopecas.util.exception.ListarObjetoException;

public class FabricanteController extends AbstractController
{
	public FabricanteController(Connection connection) throws ConexaoException
	{
		super(connection);
	}

	public FabricanteController(ExternalContext externalContext) throws ClasseNaoEncontradaException, ConexaoException
	{
		super(externalContext);
	}
	
	public void processarFabricante() throws ListarObjetoException, ConexaoException, InserirObjetoException
	{
		FabricanteEptusController fabricanteEptusController = null;
		FabricanteModel fabricanteModel = null;
		List<FabricanteVo> listaFabricante = null;
		try
		{
			synchronized (FabricanteVo.class)
			{
				listaFabricante = new ArrayList<FabricanteVo>();
				
				fabricanteEptusController = new FabricanteEptusController(getConnection());
				fabricanteEptusController.carregarListaFabricante(listaFabricante);
				
				if (listaFabricante.size() > 0)
				{
					fabricanteModel = new FabricanteModel(getConnection());
					beginTransaction();
					
					for (int i = 0; i < listaFabricante.size(); i++)
					{
						if (fabricanteModel.alterarFabricante(listaFabricante.get(i)) == 0)
							fabricanteModel.inserirFabricante(listaFabricante.get(i));
					}
					
					commit();
				}
			}
		}
		catch(ConexaoException e)
		{
			throw e;
		}
		catch (InserirObjetoException e)
		{
			rollback();
			throw e;
		}
		finally
		{
			fabricanteEptusController = null;
			fabricanteModel = null;
			
			if (listaFabricante != null)
			{
				listaFabricante.clear();
				listaFabricante = null;
			}
			
		}
	}
	
	public void cListaFabri(List<FabricanteVo> listaFabricantes) throws ListarObjetoException
	{
		FabricanteModel fabricanteModel = null;
		try
		{
			if (listaFabricantes != null)
			{
				listaFabricantes.clear();
				
				fabricanteModel = new FabricanteModel(getConnection());
				listaFabricantes.addAll(fabricanteModel.getListaFabricante());
			}
		}
		catch(ListarObjetoException e)
		{
			throw e;
		}
		finally
		{
			fabricanteModel = null;
		}
	}
}
